package com.are.servelet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.are.manejadores.ManejadorDocumentos;
import com.are.odisea.db;

/**
 * Servlet implementation class SrvPerfiles
 */
@WebServlet("/SrvDocumentos")
public class SrvDocumentos extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvDocumentos() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html;charset=ISO-8859-1");
    	PrintWriter out = response.getWriter();
    	String operacion = (String)request.getParameter("operacion");
    	
    	db conexion = null;
    	try {
    		
    		if (operacion.equals("add_permiso_rol")) {
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String idRol = (String)request.getParameter("idRol");
    			conexion = new db();
    			ManejadorDocumentos md = new ManejadorDocumentos(conexion);
    			if (md.AddPermisoRol(idDocumento, idRol)) {
    				out.print("OK");
    			}else {
    				out.println("Error al agregar permiso de rol al documento");
    			}
    			
    			
    		}
    		
    		if (operacion.equals("remove_permiso_rol")) {
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String idRol = (String)request.getParameter("idRol");
    			conexion = new db();
    			ManejadorDocumentos md = new ManejadorDocumentos(conexion);
    			if (md.RemovePermisoRol(idDocumento, idRol)) {
    				out.print("OK");
    			}else {
    				out.println("Error al eliminar permiso de rol al documento");
    			}
    			
    			
    		}

    		if (operacion.equals("add_permiso_usuario")) {
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String idUsuario = (String)request.getParameter("idUsuario");
    			conexion = new db();
    			ManejadorDocumentos md = new ManejadorDocumentos(conexion);
    			if (md.AddPermisoUsuario(idDocumento, idUsuario)) {
    				out.print("OK");
    			}else {
    				out.println("Error al agregar permiso de usuario al documento");
    			}
    		}
    		
    		if (operacion.equals("remove_permiso_usuario")) {
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String idUsuario = (String)request.getParameter("idUsuario");
    			conexion = new db();
    			ManejadorDocumentos md = new ManejadorDocumentos(conexion);
    			if (md.RemovePermisoUsuario(idDocumento, idUsuario)) {
    				out.print("OK");
    			}else {
    				out.println("Error al eliminar permiso de usuario al documento");
    			}
    		}
    		
    		if (operacion.equals("lista_roles")) {
    			conexion = new db();
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String sql = "select ID_DOC,ROL, roles.descripcion from rol_documento,roles WHERE roles.ID = rol_documento.ROL and rol_documento.ID_DOC = ?";
    			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
    			pst.setString(1, idDocumento);
    			ResultSet rs = conexion.Query(pst);
    			
    			if (rs.next()) {
    				int fila = 1;
    				out.println("<table>");
    				out.println("<tr>");
    				out.println("<th>Id</th>");
    				out.println("<th>Rol</th>");
    				out.println("<th></th>");
    				out.println("</tr>");
    				do {
    					out.println("<tr " + (fila%2==0?"class='odd'":"") +  ">");
    					out.println("<td>" + rs.getString("ROL") + "</td>");
    					out.println("<td>" + rs.getString("DESCRIPCION") + "</td>");
    					out.println("<td><a href=\"javascript:EliminarRol('" + idDocumento + "','" +  rs.getString("ROL") +  "')\">Eliminar</a></td>");
    					out.println("</tr>");
    					fila++;
    				}while(rs.next());
    				out.println("</table>");
    			}else {
    				out.println("<strong>No hay roles asignados al documento</strong>");
    			}
    			
    			
    			
    		}
    		
    		if (operacion.equals("lista_usuarios")) {
    			conexion = new db();
    			String idDocumento = (String)request.getParameter("idDocumento");
    			String sql = "select DOCUMENTOS_ID,USUARIOS_ID, usuarios.USER from permisos_documentos,usuarios WHERE usuarios.ID = permisos_documentos.USUARIOS_ID and permisos_documentos.DOCUMENTOS_ID = ?";
    			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
    			pst.setString(1, idDocumento);
    			ResultSet rs = conexion.Query(pst);
    			if (rs.next()) {
    				int fila = 1;
    				out.println("<table>");
    				out.println("<tr>");
    				out.println("<th>Id</th>");
    				out.println("<th>Rol</th>");
    				out.println("<th></th>");
    				out.println("</tr>");
    				do {
    					out.println("<tr " + (fila%2==0?"class='odd'":"") +  ">");
    					out.println("<td>" + rs.getString("USUARIOS_ID") + "</td>");
    					out.println("<td>" + rs.getString("USER") + "</td>");
    					out.println("<td><a href=\"javascript:EliminarUsuario('" + idDocumento + "','" +  rs.getString("USUARIOS_ID") +  "')\">Eliminar</a></td>");
    					out.println("</tr>");
    					fila++;
    				}while(rs.next());
    				out.println("</table>");
    			}else {
    				out.println("<strong>No hay usuarios asignados al documento</strong>");
    			}
    			
    			
    			
    		}
    	}catch (SQLException e) {
    		out.println("Error con el Servidor " + e.getMessage());
    	}finally {
    		if (conexion != null) {
    			try {
					conexion.Close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					out.println("Error al cerrar la conexion " + e.getMessage());
				}
    		}
    	}
    	
    	
    	
    	
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ProcesarPeticion(request,
				response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ProcesarPeticion(request,response);
	}

}
